
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>高效任务调度与并发流 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>高效任务调度与并发流 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">在Java并发编程中，使用线程池（如 ExecutorService）进行任务管理主要有哪些好处？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">线程池通过复用线程，减少了创建和销毁线程的开销，并避免了频繁的线程上下文切换，从而能够显著提高并发性能。</div>
          </div>
          <div class="card-source">来源: 1.1 线程池与任务调度</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">Java中的 `ScheduledThreadPoolExecutor` 主要用于解决哪类任务调度问题？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">`ScheduledThreadPoolExecutor` 提供了定时任务调度功能，它允许任务在指定的延迟时间后执行，或者周期性地执行。</div>
          </div>
          <div class="card-source">来源: 1.1 线程池与任务调度</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">文档中提到了哪三种高效的任务调度策略？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档中提到的三种策略是：1. 负载均衡，合理分配任务以避免某些线程过载；2. 优先级调度，保证高优先级任务优先执行；3. 动态调整线程池大小，根据系统负载调整线程数以避免资源浪费。</div>
          </div>
          <div class="card-source">来源: 1.2 任务调度策略</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">Java 8 中的并发流（Parallel Streams）是如何实现并行处理的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">并发流通过“分治策略”实现并行处理。它将数据集分成多个小部分，在多个线程中并行处理这些部分，最后将计算结果合并。</div>
          </div>
          <div class="card-source">来源: 2.1 并行流的工作原理</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">并发流（parallelStream）底层默认使用什么机制来调度任务？这个机制有什么特点？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">并发流底层使用的是 `ForkJoinPool`。`ForkJoinPool` 是专为分治算法设计的线程池，它能通过“工作窃取算法”动态调度空闲线程，确保任务执行的高效性。</div>
          </div>
          <div class="card-source">来源: 2.1 并行流的工作原理</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">在哪些场景下使用并发流（Parallel Streams）能带来显著的性能提升？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">并发流主要适用于两个场景：1. 数据量足够大，此时并行处理能有效减少处理时间；2. 流中的操作是独立的，即多个线程之间不共享状态，以避免引发竞态条件。</div>
          </div>
          <div class="card-source">来源: 2.2 并行流的性能与适用场景</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">使用并发流时需要注意哪些潜在的限制或问题？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">并发流的限制主要有两点：1. 线程池限制，默认的 `ForkJoinPool` 可能会因任务太小而导致资源浪费；2. 副作用问题，如果流操作中存在副作用（如多个线程共享可变状态），可能会引发线程安全问题。</div>
          </div>
          <div class="card-source">来源: 2.3 并行流的限制与优化</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">如何优化并发流的使用以获得更好的性能并避免问题？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">可以从两方面进行优化：1. 优化任务拆分粒度，对小数据集避免使用并行流；2. 避免共享状态，确保流操作是无状态的或不共享可变数据。</div>
          </div>
          <div class="card-source">来源: 2.3 并行流的限制与优化</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">如何将高效任务调度与并发流结合起来，以处理复杂的大数据任务？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">可以通过一个外部的线程池（如 `ExecutorService`）来调度和管理多个子任务，而在每个子任务内部，使用并发流来并行处理分配给该任务的数据子集。最后将所有子任务的结果合并，从而充分利用多核资源。</div>
          </div>
          <div class="card-source">来源: 3. 高效任务调度与并发流的结合</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
